package homeWorkDay04;

import socket.Server;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 聊天室服务端
 */
public class text4server {
    /**
     * 运行服务端的ServerSocket主要完成两个工作
     * 1.想服务端操作申请服务端口，客户端就是通过这个端口与ServerSocket建立链接
     * 2.监听端口，一旦一个客户端建立链接，会立刻返回一个socket 通过这个socket
     * 就可以与客户端交互了
     */
    private ServerSocket serverSocket;
    /**
     * 服务端构造方法，用来初始化
     */
    public text4server(){
        System.out.println("正在启动服务端....");
        /*
        实例化serverSocket时要指定服务端，该端口不能与
        操作系统其他应用程序端口相同，否则会抛出异常
         */
        try {
            serverSocket =new ServerSocket(8090);
            System.out.println("服务端启动完毕！");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /*
    服务端开始工作方法
     */
    public void  start(){
        try {
            System.out.println("等待客户端链接...");
        /*
        serverSocket提供了接受服务器连接的方法
        socket.accept()
        这个方法是一个阻塞方法，调用方法后卡住，此时开始等待客户端的链接
        直到一个客户端的连接完成，此时该方法会立刻返回一个socket实例
        通过socket就可以与客户端进行交互
        可以理解为操作是接电话，电话没醒就一直接
         */
            Socket socket = serverSocket.accept();
            System.out.println("一个客户端链接成功！！！！");
            //字节输入流 写入接收的数据
            InputStream in =socket.getInputStream();
            //字节转换流 衔接字节与字符 将读取的字节转字符
            InputStreamReader isr =new InputStreamReader(in);
            //缓冲字符输入流 块读写字符串
            BufferedReader br = new  BufferedReader(isr);
            String message =br.readLine();
            System.out.println("客户端说："+message);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        Server server =new Server();
        server.start();
    }
}






















